package main

import "fmt"

//定义对象
type SS struct {
	Name string
	Age  int
}

//SS对象绑定的方法
func (receiver *SS) Say() {
	receiver.Age = 123
	fmt.Println(receiver.Age)
}

/*
TODO:方法的值接受者和指针接受者的区别
TODO:1.如果是值接收者方式 receiver.Name="HHH" 这样操作是不生效的
TODO:而指针接受者修改会生效


TODO:值接收者适用于：
1. 无须修改状态的小对象或者固定值
2. 引用类型、字符串或者函数等
3. 调用时会按照其一个副本来执行调用

TODO:指针接收者适用于：
1. 修改实例状态
2. 大对象
3. 调用时会按照实际值来执行调用
*/

//SS对象绑定的方法
func (receiver SS) Hello() {
	receiver.Name = "HHH"
	fmt.Println(receiver.Name)
}

func main() {
	stu := SS{
		Name: "Hello",
		Age:  10,
	}
	stu.Say()
	stu.Hello()
}
